package com.example.simple_factory.factory;

import com.example.simple_factory.service.SendPrizesService;
import com.example.simple_factory.service.impl.DiscountServiceImpl;
import com.example.simple_factory.service.impl.SmallGiftServiceImpl;
import com.example.simple_factory.service.impl.YouKuMemberServiceImpl;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 定义工厂方法
 * 具体工厂:生成商品抽奖的类型
 * <p>
 * 优点:
 * 1.封装了创建对象的过程,可以通过参数直接获取对象,把对象的创建和业务逻辑分开,避免了可能会修改客户代码的问题。
 * 2.如果要实现新产品的话,直接修改工厂类,不需要在源代码中进行修改,降低了客户端修改代码的可能性,更加容易扩展
 * 缺点:
 * 1.再田间新产品的时候还是要修改工厂类的代码,违背了开闭原则。
 */
public class LotteryFactory {


    //定义类型 所对应的 service
    public static Map<Integer, SendPrizesService> serviceMap = new ConcurrentHashMap<>();

    static {
        serviceMap.put(1, new DiscountServiceImpl());
        serviceMap.put(2, new YouKuMemberServiceImpl());
        serviceMap.put(3, new SmallGiftServiceImpl());
    }

    /**
     * 获取具体的发送 业务实现
     *
     * @param awardType
     * @return
     */
    public static SendPrizesService getInstance(Integer awardType) {
        return serviceMap.get(awardType);
    }

}
